#include "HSModelAPI.h"
#include "Water.h"

#include <set>
#include <vector>
#include <memory>

class Model3D;
class HeightMap;

namespace HeightMapUtils
  {
  /**
  *  This method returns a vector of areas which are available for water filling below certain level
  *  Areas are built starting from local minimums
  */
  HSMODEL_API std::vector<THMapArea> FindPossibleWaterAreas(const HeightMap &i_heightmap, double i_level);

  /**
  *  This method returns all the models that represent water fillable areas highlighting for given level
  */
  HSMODEL_API std::vector<std::shared_ptr<Water>> GetWaterModels(const HeightMap &i_heightmap, double i_level);

  /**
  *  This method returns Model3D for a water area defined by given position and THMapArea
  */
  HSMODEL_API std::shared_ptr<Model3D> GenerateWaterModel(const THMapArea& i_area, size_t i_max_x, size_t i_max_z);
  }